<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
</body>
</html>
<script>
    (function(){
        function Dingyue(){
            //订阅者接收消息
            this.obj={
                //储存订阅者信息
                // '火男':[function(){},function(){}],
                // '布兰德':[function(){},function(){}],
                // '亚索':[function(){},function(){}]
            }
            //用来订阅消息
            //参数1：消息类型，是个字符串类型
            //参数2：用来接收消息的函数，是个function类型
            this.on=function(type,jieshou){
                //保存消息类型，
                this.obj[type]=this.obj[type]?this.obj[type]:[]
                this.obj[type].push(jieshou)

            }
            //发布者发布消息
            this.emit=function(type,xiaoxi){
                //先拿到type对应的类型消息的所有订阅者的函数，调用函数并传参
                this.obj[type].forEach((item)=>{
                    item(xiaoxi)
                })

            }
        }
        //将函数暴露出去
        window.Dingyue=Dingyue
    })()

    //创建实例化对象
    var os=new Dingyue()
//先订阅再接收发布者消息

    //订阅消息
    os.on('火男',function(xiaoxi){
        //这里接收来自发布者的消息'neirong'
        console.log('收到了来自八神的消息：'+xiaoxi)
    })

    //订阅消息
    os.on('火男',function(xiaoxi){
        //这里接收来自发布者的消息'neirong'
        console.log('收到了来自八神的消息：'+xiaoxi)
    })
    //订阅消息
    os.on('布兰德',function(xiaoxi){
        //这里接收来自布兰德发布的消息
        console.log('收到了来自布兰德的消息：'+xiaoxi)
    })
    //订阅消息
    os.on('布兰德',function(xiaoxi){
        //这里接收来自布兰德发布的消息
        console.log('收到了来自布兰德的消息：'+xiaoxi)
    })
    //订阅消息
    os.on('布兰德',function(xiaoxi){
        //这里接收来自布兰德发布的消息
        console.log('收到了来自布兰德的消息：'+xiaoxi)
    })

      //订阅消息
    os.on('亚索',function(xiaoxi){
        //这里接收来自布兰德发布的消息
        console.log('收到了来自亚索的消息：'+xiaoxi)
    })

    console.log(os)
    //发布消息
    
    os.emit('布兰德','火神来了！')
    os.emit('亚索','哈撒给！')


</script>